/* 
 * File:   complete.cpp
 * Author: root
 *
 * Created on 21 mai 2009, 13:39
 */
#include "methods.h"
/*
 * 
 */
const char *help = "\
progname: Chainage complet.cc\n\
Ce programme fait un pré-traitement et ensuite traite l'image.\n\
version: Torch3 vision2.0, 2009\n\
(c) Ewelle Ewelle Richard (eerichard@ifi.edu.vn)\n";
        
int main(int argc, char** argv) {

//  Quelques déclarations.

    	ImageRgb *imageIn = NULL;
	Image *imageOut = NULL;
	Image *image = NULL;

        char *imageFileName;

//  Construction de la ligne de commande.

  	CmdLine cmd;
	cmd.setBOption("write log", false);
  	cmd.info(help);
  	cmd.addText("\nArguments:");
  	cmd.addSCmdArg("image filename", &imageFileName, "image filename");
	cmd.read(argc, argv);

//  Chargement de l'image et initialisation des structures.
        
        Methods fonctions(imageFileName);
	imageIn = fonctions.loadImage(imageFileName);

print("\n\n");
print(" ================================================\n");
print(" =            SEGMENTATION D'IMAGE              =\n");
print(" ================================================\n\n");

//  Transformer l'image en niveau de gris

	float **matrix = fonctions.imageToMatrix(imageIn);
	imageOut = fonctions.matrixToImage(matrix);
	imageOut->save(fonctions.getName(0));
        fonctions.setBack(fonctions.getBackColor(imageOut));
print("  1. Convertion en niveau de gris -> %s  :OK\n",fonctions.getName(0));
//  ****    Début de prétraitement  ****//
        matrix=fonctions.firstTraitment(matrix);
        image = fonctions.matrixToImage(matrix);
        image->save(fonctions.getName(1));
print("  2. Binarisation -> %s  :OK\n",fonctions.getName(1));


        float * gradientVector=fonctions.secondTraitment(matrix);
	matrix = fonctions.arrayToMatrix(gradientVector);
        matrix=fonctions.thirdTraitment(matrix);
print("\n");

        fonctions.finalSegment(matrix,imageIn);
print("\n\n");
print("         ******* Fin de la segmentation  ***********  \n\n");

	delete imageOut;
	delete imageIn;
        delete image;

    return (EXIT_SUCCESS);
}

